home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ewl / ewl_debug.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  5KB  |  217 lines

  1. #ifndef __EWL_DEBUG_H__
  2. #define __EWL_DEBUG_H__
  3.  
  4. #include "ewl-config.h"
  5. #include "ewl_misc.h"
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. #define DLEVEL_UNSTABLE 1
  11. #define DLEVEL_TESTING 10
  12. #define DLEVEL_STABLE 20
  13.  
  14. inline void ewl_print_warning(void);
  15. inline void ewl_segv(void);
  16. inline void ewl_backtrace(void);
  17.  
  18. #define DEBUG 1
  19.  
  20. #ifdef DEBUG
  21.  
  22. #define DENTER_FUNCTION(lvl) \
  23. { \
  24.     if (ewl_config.debug.enable && (ewl_config.debug.level >= (lvl))) \
  25.       { \
  26.         char *indent = ewl_debug_get_indent(); \
  27.         ewl_config.debug.indent_lvl ++; \
  28.         fprintf(stderr, "%s--> %s:%i\tEntering %s();\n", \
  29.             indent, __FILE__, __LINE__, __FUNCTION__); \
  30.         FREE(indent); \
  31.       } \
  32. }
  33.  
  34. #define DLEAVE_FUNCTION(lvl) \
  35. { \
  36.     if (ewl_config.debug.enable && (ewl_config.debug.level >= (lvl))) \
  37.       { \
  38.         char *indent; \
  39.             ewl_config.debug.indent_lvl --; \
  40.         indent = ewl_debug_get_indent(); \
  41.         fprintf(stderr, "%s<--  %s:%i\tLeaving  %s();\n", \
  42.             indent, __FILE__, __LINE__, __FUNCTION__); \
  43.         FREE(indent); \
  44.       } \
  45. }
  46.  
  47. #define DRETURN(lvl) \
  48. { \
  49.     DLEAVE_FUNCTION(lvl); \
  50.     if (ewl_config.debug.enable && (ewl_config.debug.level >= (lvl))) \
  51.       { \
  52.         char *indent; \
  53.         indent = ewl_debug_get_indent(); \
  54.         fprintf(stderr, "%s<--  %s:%i\tReturn in %s();\n", \
  55.             indent, __FILE__, __LINE__, __FUNCTION__); \
  56.         FREE(indent); \
  57.       } \
  58.     return; \
  59. }
  60.  
  61. #define DRETURN_PTR(ptr, lvl) \
  62. { \
  63.     DLEAVE_FUNCTION(lvl); \
  64.     if (ewl_config.debug.enable && (ewl_config.debug.level >= (lvl))) \
  65.       { \
  66.         char *indent; \
  67.         indent = ewl_debug_get_indent(); \
  68.         fprintf(stderr, "%s<--  %s:%i\tReturning %p in %s();\n", \
  69.             indent, __FILE__, __LINE__, (void *) (ptr), __FUNCTION__); \
  70.         FREE(indent); \
  71.       } \
  72.     return (void *)(ptr); \
  73. }
  74.  
  75. #define DRETURN_FLOAT(num, lvl) \
  76. { \
  77.     DLEAVE_FUNCTION(lvl); \
  78.     if (ewl_config.debug.enable && (ewl_config.debug.level >= (lvl))) \
  79.       { \
  80.         char *indent; \
  81.         indent = ewl_debug_get_indent(); \
  82.         fprintf(stderr, "%s<--  %s:%i\tReturning %f in %s();\n", \
  83.             indent, __FILE__, __LINE__, (float) (num), __FUNCTION__); \
  84.         FREE(indent); \
  85.       } \
  86.     return num; \
  87. }
  88.  
  89. #define DRETURN_INT(num, lvl) \
  90. { \
  91.     DLEAVE_FUNCTION(lvl); \
  92.     if (ewl_config.debug.enable && (ewl_config.debug.level >= (lvl))) \
  93.       { \
  94.         char *indent; \
  95.         indent = ewl_debug_get_indent(); \
  96.         fprintf(stderr, "%s<--  %s:%i\tReturning %i in %s();\n", \
  97.             indent, __FILE__, __LINE__, (int) (num), __FUNCTION__); \
  98.         FREE(indent); \
  99.       } \
  100.     return num; \
  101. }
  102.  
  103. #define DWARNING(fmt) \
  104. { \
  105.     ewl_print_warning(); \
  106.     fprintf(stderr, "\tIn function:\n\n" \
  107.             "\t%s();\n\n", __FUNCTION__); \
  108.     fprintf(stderr, fmt); \
  109.     ewl_backtrace(); \
  110.     ewl_segv(); \
  111. }
  112.  
  113. #define DCHECK_PARAM_PTR(str, ptr) \
  114. { \
  115.     if (!(ptr)) \
  116.       { \
  117.         ewl_print_warning(); \
  118.         fprintf(stderr, "\tThis program is calling:\n\n" \
  119.                 "\t%s();\n\n" \
  120.                 "\tWith the parameter:\n\n" \
  121.                 "\t%s\n\n" \
  122.                 "\tbeing NULL. Please fix your program.\n", \
  123.                 __FUNCTION__, str); \
  124.         ewl_backtrace(); \
  125.         ewl_segv(); \
  126.         return; \
  127.       } \
  128. }
  129.  
  130. #define DCHECK_PARAM_PTR_RET(str, ptr, ret) \
  131. { \
  132.     if (!(ptr)) \
  133.       { \
  134.         ewl_print_warning(); \
  135.         fprintf(stderr, "\tThis program is calling:\n\n" \
  136.                 "\t%s();\n\n" \
  137.                 "\tWith the parameter:\n\n" \
  138.                 "\t%s\n\n" \
  139.                 "\tbeing NULL. Please fix your program.\n", \
  140.                 __FUNCTION__, str); \
  141.         ewl_backtrace(); \
  142.         ewl_segv(); \
  143.         return ret; \
  144.       } \
  145. }
  146.  
  147. #define DCHECK_TYPE(str, ptr, type) \
  148. { \
  149.     if (!ewl_widget_type_is(EWL_WIDGET(ptr), type)) \
  150.     { \
  151.         ewl_print_warning(); \
  152.         fprintf(stderr, "\tThis program is calling:\n\n" \
  153.                 "\t%s();\n\n" \
  154.                 "\tWith the paramter:\n\n" \
  155.                 "\t%s\n\n" \
  156.                 "\tas the wrong type. (%s) instead of (%s).\n" \
  157.                 "\tPlease fix your program.\n", \
  158.                 __FUNCTION__, str, EWL_WIDGET(ptr)->inheritance, type); \
  159.         ewl_backtrace(); \
  160.         ewl_segv(); \
  161.     } \
  162. }
  163.  
  164. #define DCHECK_TYPE_RET(str, ptr, type, ret) \
  165. { \
  166.     if (!ewl_widget_type_is(EWL_WIDGET(ptr), type)) \
  167.     { \
  168.         ewl_print_warning(); \
  169.         fprintf(stderr, "\tThis program is calling:\n\n" \
  170.                 "\t%s();\n\n" \
  171.                 "\tWith the paramter:\n\n" \
  172.                 "\t%s\n\n" \
  173.                 "\tas the wrong type. (%s) instead of (%s).\n" \
  174.                 "\tPlease fix your program.\n", \
  175.                 __FUNCTION__, str, EWL_WIDGET(ptr)->inheritance, type); \
  176.         ewl_backtrace(); \
  177.         ewl_segv(); \
  178.         return ret; \
  179.     } \
  180. }
  181.  
  182. #else
  183.  
  184. #define DENTER_FUNCTION(lvl) {}
  185. #define DLEAVE_FUNCTION(lvl) {}
  186. #define DRETURN(lvl) return
  187. #define DRETURN_PTR(ptr, lvl) return (void *)(ptr)
  188. #define DRETURN_FLOAT(num, lvl) return num
  189. #define DRETURN_INT(num, lvl) return num
  190. #define DWARNING(fmt) {}
  191. #define DCHECK_PARAM_PTR(str, ptr) \
  192. { \
  193.     if (!(ptr)) { \
  194.         return; \
  195.     } \
  196. }
  197. #define DCHECK_PARAM_PTR_RET(str, ptr, ret) \
  198. { \
  199.     if (!(ptr)) { \
  200.         return ret; \
  201.     } \
  202. }
  203. #define DCHECK_TYPE(str, ptr, type) {}
  204. #define DCHECK_TYPE_RET(str, ptr, type, ret) {}
  205. #endif
  206.  
  207. #define DERROR(fmt) \
  208. { \
  209.     ewl_print_warning(); \
  210.     fprintf(stderr, "\tIn function:\n\n" \
  211.             "\t%s();\n\n", __FUNCTION__); \
  212.     fprintf(stderr, fmt); \
  213. }
  214.  
  215. #endif                /* __EWL_DEBUG_H__ */
  216.  
  217.